package c2.cross.business.rank.manager;

import c2.cross.business.rank.CrossRankModule;
import c2.cross.business.rank.h.ICrossRankHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.annotation.Transient;

import java.util.Optional;

/**
 * 抽象跨服排行功能管理器
 */
@Slf4j
public abstract class BaseCrossRankFuncManager {
    @Transient
    protected CrossRankModule parent;
    /**
     * 初始化
     */
    public final void init(CrossRankModule parent) {
        try {
            this.parent = parent;
            initSelf(parent);
        } catch (Exception e) {
            log.error("", e);
        }
    }

    /**
     * 自我初始化
     */
    public abstract void initSelf(CrossRankModule parent);

    /**
     * 安全循环
     */
    public final void safeTick() {
        try {
            tick();
        } catch (Exception e) {
            log.error("", e);
        }
    }

    /**
     * 循环
     */
    public abstract void tick();

    /**
     * 是否关注排行ID
     *
     * @param rankId 排行ID
     */
    public abstract boolean focusRankId(int rankId);

    /**
     * 尝试获取排行处理器
     *
     * @param rankId 排行ID
     */
    public abstract Optional<ICrossRankHandler> tryGetCrossSingleRankHandler(int rankId);

    /**
     * 服务器从跨服移除
     *
     * @param srvId 服务器ID
     */
    public void noticeMergeChangeCross(int srvId) {
    }

    /**
     * 服务器合并信息
     *
     * @param oldId 老服务器ID
     * @param curId 新服务器ID
     */
    public void noticeMergeIntoCross(int oldId, int curId) {
    }
}
